#include "recboxitem.h"
#include "ui_recboxitem.h"
#include <QDebug>
#include <QPropertyAnimation>
#include <QPainter>
#include <QPainterPath>

RecBoxItem::RecBoxItem(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::RecBoxItem)
{
    ui->setupUi(this);

    //安装事件监听器
    ui->MusicImageBox->installEventFilter(this);
    //设置播放图片, 并默认隐藏
    QPixmap pixmap(":/images/start.png");
    pixmap = pixmap.scaled(32, 32, Qt::KeepAspectRatio, Qt::SmoothTransformation);//设置图片缩放, 保持纵横比
    ui->PlayImage->setPixmap(pixmap);
    ui->PlayImage->hide();
    //设置recboxItem是文本格式
    QFont font;
    font.setFamily("Microsoft YaHei"); // 字体名（可换成“微软雅黑”、“SimSun”等）
    font.setPixelSize(12);             // 字体大小（像素）
    font.setBold(false);                // 是否加粗
    ui->RecBoxItemText->setFont(font);
}

RecBoxItem::~RecBoxItem()
{
    delete ui;
}

void RecBoxItem::setRecText(const QString &text)
{
    //构建HTML风格, 设置行间距
    QString recText = "<div style=\"line-height:90%;\">" + text + "</div>";
    ui->RecBoxItemText->setText(recText);
    //设置自动换行
    ui->RecBoxItemText->setWordWrap(true);
    ui->RecBoxItemText->setTextFormat(Qt::RichText);  // 关键：让QLabel解析HTML
}

void RecBoxItem::setRecImage(const QString &imagePath)
{
    // 1读取图片
    QPixmap pixmap(imagePath);
    if (pixmap.isNull()) return;  // 防止加载失败崩溃

    // 缩放图片以适应 QLabel 大小，保持宽高比
    pixmap = pixmap.scaled(ui->recMusicImage->size(), Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);

    // 3创建一个与 QLabel 同尺寸的透明 QPixmap
    QPixmap rounded(ui->recMusicImage->size());
    rounded.fill(Qt::transparent);

    // 4使用 QPainter 在透明底上绘制圆角图片
    QPainter painter(&rounded);
    painter.setRenderHint(QPainter::Antialiasing);           // 抗锯齿
    painter.setRenderHint(QPainter::SmoothPixmapTransform);  // 平滑缩放

    // 创建圆角路径（半径可按 QLabel 尺寸调整，比如 10 或 15）
    int radius = 5;
    QPainterPath path;
    path.addRoundedRect(rounded.rect(), radius, radius);

    // 限定绘图区域为圆角路径
    painter.setClipPath(path);

    // 将缩放后的图片绘制到圆角区域
    painter.drawPixmap(0, 0, pixmap);

    // 设置到 QLabel 上显示
    ui->recMusicImage->setPixmap(rounded);
    ui->recMusicImage->setScaledContents(true);
}


bool RecBoxItem::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->MusicImageBox){
        //鼠标进入事件
        if( event->type() == QEvent::Enter){
            //设置上浮动画
            QPropertyAnimation *animation = new QPropertyAnimation(ui->MusicImageBox,"geometry",nullptr);
            animation->setStartValue(QRect(10,10,ui->MusicImageBox->width(),ui->MusicImageBox->height()));
            animation->setEndValue(QRect(10,0,ui->MusicImageBox->width(),ui->MusicImageBox->height()));
            animation->setDuration(150);
            animation->start();
            ui->PlayImage->show();//显示播放图片
            connect(animation,&QPropertyAnimation::finished,this,[=](){
                delete animation;
            });
        }
        //鼠标离开事件
        else if(event->type() == QEvent::Leave){
            //设置下浮动画
            QPropertyAnimation *animation = new QPropertyAnimation(ui->MusicImageBox,"geometry",nullptr);
            animation->setStartValue(QRect(10,0,ui->MusicImageBox->width(),ui->MusicImageBox->height()));
            animation->setEndValue(QRect(10,10,ui->MusicImageBox->width(),ui->MusicImageBox->height()));
            animation->setDuration(150);
            animation->start();
            ui->PlayImage->hide();//隐藏播放图片
            connect(animation,&QPropertyAnimation::finished,this,[=](){
                delete animation;
            });
        }
    }
    return QObject::eventFilter(watched,event);
}
